package interview.dfs;

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * hw 2022年9月23日-秋招机考-第一题-最佳检测顺序 https://codefun2000.com/p/P1163
 */
public class BestCheckOrder {

    /**
     * 思路：用一个二维数组记录每个索引节点的后继节点数量。遍历parents[]，每扫描到一个parent非-1的节点就向上追溯将上层的后继节点数都增1。
     * 最后再将二维数组先按照后继节点数降序排序，若相同再按索引升序排序，用Arrays.stream(nums)转流拼接输出结果
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] parents = new int[n];
        for (int i = 0;i < n;i++) {
            parents[i] = sc.nextInt();
        }
        //后继节点数 索引
        int[][] nums = new int[n][2];
        for (int i = 0;i < n;i++) {
            nums[i][1] = i;
            int f = parents[i];
            while (f != -1) {
                nums[f][0]++;
                f = parents[f];
            }
        }
        //先按照后继节点数降序排序，若相同再按索引升序排序
        Arrays.sort(nums, (x, y) -> y[0] - x[0]);
        System.out.println(Arrays.stream(nums).map(x -> x[1] + "").collect(Collectors.joining(" ")));
    }
}
